package com.eastfair.venueservice.dto;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.eastfair.core.base.entity.SuperEntity;
import com.eastfair.venueservice.enumeration.WorkOvertimeWorkOvertimeSourceEnum;
import com.eastfair.venueservice.enumeration.WorkOvertimeWorkOvertimeTypeEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;

/**
 * <p>
 * 实体类
 * 加班申请
 * </p>
 *
 * @author dq
 * @since 2022-10-19
 */
@Data
@ApiModel(value = "WorkOvertimeUpdateDTO", description = "加班申请")
public class WorkOvertimeDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "主键")
    @NotNull(message = "请填写主键", groups = SuperEntity.Update.class)
    private Long id;
    /**
     * 是否启用（确认状态）：1是 已确认；0否 未确认
     */
    @ApiModelProperty(value = "是否启用（确认状态）：1是 已确认；0否 未确认")
    private Integer isEnabled;
    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    private Integer isDeleted;
    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    private Long projectId;
    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    private Long subsystemId;
    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    private Long tenantId;
    /**
     * 加班单号
     */
    @ApiModelProperty(value = "加班单号")
    @Size(max = 64, message = "加班单号长度不能超过64")
    private String workOvertimeNumber;
    /**
     * 服务商系统加班单号
     */
    @ApiModelProperty(value = "服务商系统加班单号")
    @Size(max = 64, message = "服务商系统加班单号长度不能超过64")
    private String spWorkOvertimeNumber;
    /**
     * 订单号
     */
    @ApiModelProperty(value = "订单号")
    @Size(max = 64, message = "订单号长度不能超过64")
    private String orderNumber;
    /**
     * 加班申请来源 #{ONLINE_BOOK:线上预定;ON_SITE_ORDER:现场预定}
     */
    @ApiModelProperty(value = "加班申请来源 #{ONLINE_BOOK:线上预定;ON_SITE_ORDER:现场预定}")
    private WorkOvertimeWorkOvertimeSourceEnum workOvertimeSource;
    /**
     * 加班规格名称
     */
    @ApiModelProperty(value = "加班规格名称")
    @Size(max = 100, message = "加班规格名称长度不能超过100")
    private String specName;
    /**
     * 加班规则类型
     */
    @ApiModelProperty(value = "加班规则类型")
    @Size(max = 64, message = "加班规则类型长度不能超过64")
    private String ruleType;
    /**
     * 展会ID
     */
    @ApiModelProperty(value = "展会ID")
    private Long exhibitionManageId;
    /**
     * 展会名称
     */
    @ApiModelProperty(value = "展会名称")
    @Size(max = 200, message = "展会名称长度不能超过200")
    private String exhibitionManageName;
    /**
     * 公司ID
     */
    @ApiModelProperty(value = "公司ID")
    private Long companyId;
    /**
     * 公司编码
     */
    @ApiModelProperty(value = "公司编码")
    @Size(max = 64, message = "公司编码长度不能超过64")
    private String companyCode;
    /**
     * 公司名称
     */
    @ApiModelProperty(value = "公司名称")
    @Size(max = 200, message = "公司名称长度不能超过200")
    private String companyName;
    /**
     * 公司类型
     */
    @ApiModelProperty(value = "公司类型")
    @Size(max = 64, message = "公司类型长度不能超过64")
    private String companyType;
    /**
     * 主场ID
     */
    @ApiModelProperty(value = "主场ID")
    private Long homeId;

    /**
     * 主场名称
     */
    @ApiModelProperty(value = "主场名称")
    @Size(max = 200, message = "主场名称长度不能超过200")
    private String homeName;
    /**
     * 联系人
     */
    @ApiModelProperty(value = "联系人")
    @Size(max = 100, message = "联系人长度不能超过100")
    private String contact;
    /**
     * 联系方式
     */
    @ApiModelProperty(value = "联系方式")
    @Size(max = 100, message = "联系方式长度不能超过100")
    private String phone;
    /**
     * 展厅编码
     */
    @ApiModelProperty(value = "展厅编码")
    @Size(max = 64, message = "展厅编码长度不能超过64")
    private String spaceCode;
    /**
     * 展厅号
     */
    @ApiModelProperty(value = "展厅号")
    @Size(max = 100, message = "展厅号长度不能超过100")
    private String spaceName;
    /**
     * 展位号
     */
    @ApiModelProperty(value = "展位号")
    @Size(max = 100, message = "展位号长度不能超过100")
    private String siteName;
    /**
     * 展位面积
     */
    @ApiModelProperty(value = "展位面积")
    private BigDecimal siteArea;
    /**
     * 加班面积
     */
    @ApiModelProperty(value = "加班面积")
    private BigDecimal overtimeArea;
    /**
     * 加班日期
     */
    @ApiModelProperty(value = "加班日期")
    private LocalDate overtimeDate;
    /**
     * 申请时间
     */
    @ApiModelProperty(value = "申请时间")
    private LocalDateTime reportTime;
    /**
     * 计时单位
     */
    @ApiModelProperty(value = "计时单位")
    private Integer timeUnit;
    /**
     * 加班开始时间
     */
    @ApiModelProperty(value = "加班开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    @DateTimeFormat(pattern = "HH:mm")
    private LocalTime overtimeStart;

    /**
     * 加班结束时间
     */
    @ApiModelProperty(value = "加班结束时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    @DateTimeFormat(pattern = "HH:mm")
    private LocalTime overtimeEnd;

    /**
     * 时段1开始时间
     */
    @ApiModelProperty(value = "时段1开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    @DateTimeFormat(pattern = "HH:mm")
    private LocalTime periodOneBegin;

    /**
     * 时段1开始时间
     */
    @ApiModelProperty(value = "时段1开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    @DateTimeFormat(pattern = "HH:mm")
    private LocalTime periodOneEnd;

    /**
     * 时段2开始时间
     */
    @ApiModelProperty(value = "时段2开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    @DateTimeFormat(pattern = "HH:mm")
    private LocalTime periodTwoBegin;

    /**
     * 时段2开始时间
     */
    @ApiModelProperty(value = "时段2开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    @DateTimeFormat(pattern = "HH:mm")
    private LocalTime periodTwoEnd;

    /**
     * 申请加班时长(小时)
     */
    @ApiModelProperty(value = "申请加班时长(小时)")
    private Double reportOvertimePeriod;

    /**
     * 时段1时长
     */
    @ApiModelProperty(value = "时段1时长")
    private Double periodOne;

    /**
     * 时段2时长
     */
    @ApiModelProperty(value = "时段2时长")
    private Double periodTwo;
    /**
     * 实际离场时间
     */
    @ApiModelProperty(value = "实际离场时间")
    private LocalDateTime actualDepartTime;
    /**
     * 实际加班时长(小时)
     */
    @ApiModelProperty(value = "实际加班时长(小时)")
    private Double actualOvertimePeriod;
    /**
     * 时段1单价
     */
    @ApiModelProperty(value = "时段1单价")
    private BigDecimal periodOnePrice;
    /**
     * 时段2单价
     */
    @ApiModelProperty(value = "时段2单价")
    private BigDecimal periodTwoPrice;
    /**
     * 加班计费金额
     */
    @ApiModelProperty(value = "加班计费金额")
    private BigDecimal overtimeAmount;
    /**
     * 超时金额
     */
    @ApiModelProperty(value = "超时金额")
    private BigDecimal overtimeExtraAmount;
    /**
     * 超时加急费用
     */
    @ApiModelProperty(value = "超时加急费用")
    private BigDecimal overtimeSurcharge;
    /**
     * 应付总金额
     */
    @ApiModelProperty(value = "应付总金额")
    private BigDecimal shouldPayAmount;
    /**
     * 实际支付金额
     */
    @ApiModelProperty(value = "实际支付金额")
    private BigDecimal actualPayAmount;
    /**
     * 利润率
     */
    @ApiModelProperty(value = "利润率")
    private BigDecimal profitRate;
    /**
     * 支付方式
     */
    @ApiModelProperty(value = "支付方式")
    @Size(max = 64, message = "支付方式长度不能超过64")
    private String payWay;
    /**
     * 支付时间
     */
    @ApiModelProperty(value = "支付时间")
    private LocalDateTime payTime;
    /**
     * 支付状态
     */
    @ApiModelProperty(value = "支付状态")
    @Size(max = 64, message = "支付状态长度不能超过64")
    private String payStatus;
    /**
     * 派工状态
     */
    @ApiModelProperty(value = "派工状态")
    @Size(max = 64, message = "派工状态长度不能超过64")
    private String workOrderStatus;
    /**
     * 加班类型 #{WORK_OVERTIME_TYPE:加班类型;ADVANCE_APPROACH:提前入场申请;LOAD_UPLOAD_SERVICE:装卸服务申请}
     */
    @ApiModelProperty(value = "加班类型 #{WORK_OVERTIME_TYPE:加班类型;ADVANCE_APPROACH:提前入场申请;LOAD_UPLOAD_SERVICE:装卸服务申请}")
    private WorkOvertimeWorkOvertimeTypeEnum workOvertimeType;
    /**
     * 审核状态 (SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过;CANCEL:取消申请)
     */
    @ApiModelProperty(value = "审核状态 (SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过;CANCEL:取消申请)")
    @Size(max = 64, message = "审核状态 (SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过;CANCEL:取消申请)长度不能超过64")
    private String auditStatus;
    /**
     * 审核意见
     */
    @ApiModelProperty(value = "审核意见")
    @Size(max = 200, message = "审核意见长度不能超过200")
    private String auditOpinion;
    /**
     * 审核时间
     */
    @ApiModelProperty(value = "审核时间")
    private LocalDateTime auditTime;
    /**
     * 审核人ID
     */
    @ApiModelProperty(value = "审核人ID")
    private Long auditUserId;
    /**
     * 审核人姓名
     */
    @ApiModelProperty(value = "审核人姓名")
    @Size(max = 64, message = "审核人姓名长度不能超过64")
    private String auditUserName;
    /**
     * 所属系统
     */
    @ApiModelProperty(value = "所属系统")
    @Size(max = 64, message = "所属系统长度不能超过64")
    private String belongSystem;
    /**
     * 备注信息
     */
    @ApiModelProperty(value = "备注信息")
    @Size(max = 500, message = "备注信息长度不能超过500")
    private String remark;
    /**
     * 加班单号列表
     */
    @ApiModelProperty(value = "加班单号列表")
    private List<String> workOvertimeNumberList;
    /**
     * ID列表
     */
    @ApiModelProperty(value = "ID列表")
    private List<Long> idList;
    /**
     * 关键字
     */
    @ApiModelProperty(value = "关键字")
    private String keyword;

    /**
     * 查询来源(数据字典：MENU_AFFILIATION)
     */
    @ApiModelProperty(value = "关键字")
    private String querySource;

    /**
     * 付款方
     */
    @ApiModelProperty(value = "付款方")
    @Size(max = 255, message = "付款方长度不能超过255")
    private String payer;

    /**
     * 收款方
     */
    @ApiModelProperty(value = "收款方")
    @Size(max = 255, message = "收款方长度不能超过255")
    private String payee;
    /**
     * 商户系统标识
     */
    @ApiModelProperty(value = "商户系统标识")
    private String systemCode;

    /**
     * 最小起订平米
     */
    @ApiModelProperty(value = "最小起订平米")
    private BigDecimal minArea;

    /**
     * 所属系统列表
     */
    @ApiModelProperty(value = "所属系统列表")
    private List<String> belongSystemList;
}
